package com.boot.handle;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class TestInvocationHandler implements InvocationHandler {

    //代理对象
    private Object subject;

    public TestInvocationHandler(Object subject){
        this.subject = subject;
    }

    /**
     *代理的方法被调用时，代理会把这个调用转发给InvocationHandler。
     *不管代理被调用的事何种方法，处理器被调用的一定是invoke方法。
     * @param object
     * @param method
     * @param objects
     * @return
     * @throws Throwable
     */
    @Override
    public Object invoke(Object object, Method method, Object[] objects) throws Throwable {
        System.out.println("method:" + method);
        //TODO 处理调用对象方法之前动作
        System.out.println("处理调用对象方法之前动作");
        //通过Method类调用真实对象的方法
        method.invoke(subject, objects);
        //TODO 处理调用对象方法之后动作
        System.out.println("处理调用对象方法之后动作");
        return null;
    }

}
